package com.anan.exception;


import com.anan.utils.Result;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import javax.servlet.http.HttpServletRequest;


// 全局异常信息处理
@RestControllerAdvice  // 是Spring中的一个注解，用于全局处理REST请求，包括异常处理、数据绑定、数据验证等。它可以应用到整个应用程序，也可以应用于某个特定的包或类。
@RestController
public class AGlobalExceptionHandlerController {

    private static final Logger logger = LoggerFactory.getLogger(AGlobalExceptionHandlerController.class);

    // @ExceptionHandler用于处理Controller中抛出的异常。当Controller中抛出指定的异常类型时，Spring会自动调用使用了@ExceptionHandler注解的方法来处理该异常。这样可以统一处理异常，并返回统一的错误信息给客户端。
    @ExceptionHandler(value = Exception.class)
    // 拦截全局错误信息 将方法的返回值作为相应数据返回
    Result handleException(Exception e, HttpServletRequest request) {
        logger.error("请求错误，请求地址:"+request.getRequestURL()+",错误信息:"+ e.getMessage());
        Result ajaxResponse = new Result();
        //404
        if (e instanceof BusinessException) {
            ajaxResponse.setCode(400);
            ajaxResponse.setMsg(e.getMessage());
        }else {
            ajaxResponse.setMsg(e.getMessage());
            ajaxResponse.setCode(500);
        }
        return ajaxResponse;
    }
}
